//
//  CZEmoticonTools.swift
//  Weibo28
//
//  Created by Apple on 16/5/21.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
//  读取表情数据专用类
class CZEmoticonTools: NSObject {

    //  单例全局访问点
    static let sharedTools: CZEmoticonTools = CZEmoticonTools()
    //  构造函数私有化
    private override init() {
        super.init()
        
    }
    
    //  创建emoticonbundle对象,因为主要都在这个bundle
    private lazy var emoticonBunle: NSBundle = {
        // let path = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
       
        //  创建bundle对象
        let bundle = NSBundle(path: path)!
        //  返回bundle对象
        return bundle
    }()
    
    //  读取默认表情
    private lazy var defaultEmoticons: [CZEmoticon] = {
        return self.loadEmoticonsWithPath("default/info.plist")
    }()
    
    //  读取emoji表情
    private lazy var emojiEmoticons: [CZEmoticon] = {
        return self.loadEmoticonsWithPath("emoji/info.plist")
    }()
    
    //  浪小花
    private lazy var lxhEmoticons: [CZEmoticon] = {
        return self.loadEmoticonsWithPath("lxh/info.plist")
    }()
    
    //  给我们的表情视图准备
    lazy var allEmoticons: [[[CZEmoticon]]] = {
        //  表情视图包含三个种类型的二维数组
        return [
            self.sectionWithEmotions(self.defaultEmoticons),
            self.sectionWithEmotions(self.emojiEmoticons),
            self.sectionWithEmotions(self.lxhEmoticons)
        ]
    }()
    
    //  抽取读取表情方法
    private func loadEmoticonsWithPath(subPath: String) -> [CZEmoticon]{
        // pathForResource 如果不知道路径取得就是Resources路径
        let path = self.emoticonBunle.pathForResource(subPath, ofType: nil)!
        //  加载plist资源数据
        let array = NSArray(contentsOfFile: path)!
        var tempArray = [CZEmoticon]()
        //  遍历数组转模型
        for dic in array {
            let emoticon = CZEmoticon(dic: dic as! [String : AnyObject])
            //  判断是否是图片
            if emoticon.type == "0" {
                //  给我们path拼接路径
                //  获取图片名字
                let png = emoticon.png!
                //  把路径里面的最后一部分干掉
                let subPath = (path as NSString).stringByDeletingLastPathComponent
                //  图片的全路径
                emoticon.path = subPath + "/" + png
            }
            
            
            tempArray.append(emoticon)
        }
        
        return tempArray
    }
    
    //  计算页数,截取数据
    private func sectionWithEmotions(emoticons: [CZEmoticon]) -> [[CZEmoticon]] {
        //  计算页数
        let pageCount = (emoticons.count - 1) / 20 + 1
        
        
        var tempArray: [[CZEmoticon]] = [[CZEmoticon]]()
        //  遍历页数计算截取
        for i in 0..<pageCount {
            // 计算当前截取的索引
            let locaction = i * 20
            var length = 20
            //  如果数组越界 重写计算截取个数
            if locaction + length > emoticons.count {
                length = emoticons.count - locaction
            }
            
            //  截取数组元素
            let subArray = (emoticons as NSArray).subarrayWithRange(NSMakeRange(locaction, length)) as! [CZEmoticon]
            tempArray.append(subArray)
        }
        return tempArray
        
    }
    
    //  通过表情字符串 查找表情模型
    func emoticonWithEmoticonStr(emoticonStr: String) -> CZEmoticon? {
        //  如果闭包中有一个参数则可以使用$0 代码闭包中的第一个参数 ...
        if let defaultEmoticon = defaultEmoticons.filter({$0.chs == emoticonStr}).first {
            return defaultEmoticon
        }
        if let lxhEmoticon = lxhEmoticons.filter({$0.chs == emoticonStr}).first {
            return lxhEmoticon
        }
        
        
        
//        let defaultEmoticon = defaultEmoticons.filter { (emoticon) -> Bool in
//            return emoticon.chs == emoticonStr
//        }.first
//        
//        
//        if defaultEmoticon != nil {
//            return defaultEmoticon
//        }
//        
//        let lxhEmoticon = lxhEmoticons.filter { (emoticon) -> Bool in
//            return emoticon.chs == emoticonStr
//        }.first
//        
//        if lxhEmoticon != nil {
//            return lxhEmoticon
//        }
        
        
        
        
//        //  先从默认表数组中查找
//        for value in defaultEmoticons {
//            if value.chs == emoticonStr {
//                return value
//            }
//        }
//        //  从浪小花数组中查找
//        for value in lxhEmoticons {
//            if value.chs == emoticonStr {
//                return value
//            }
//        }
//        
    
        return nil
        
    }
    
    
    
}
